from langchain_core.messages import HumanMessage
from langchain_core.prompts import PromptTemplate, ChatPromptTemplate, SystemMessagePromptTemplate, \
    FewShotPromptTemplate

from langchain_core.prompts.chat import MessagesPlaceholder

# 提示词模板：
# 1、PromptTemplate
# 2、ChatPromptTemplate
# 3、xxxMessagePromptTemplate -> SystemMessagePromptTemplate、Human、FewShotPromptTemplate

# PromptTemplate()
# ChatPromptTemplate()

# SystemMessagePromptTemplate()
# FewShotPromptTemplate()

# 1、通过构造方法获取提示词实例
# prompt_template = PromptTemplate(
#     template="你是一个{role}小助手，你叫{name}",
#     input_variables=["role", "name"]
# )
# prompt = prompt_template.format(role="医疗", name="小伊伊")
# print(f"提示词===》{prompt}")

# 2、from_template方式
# prompt_template = PromptTemplate.from_template("你是一个{role}小助手，你叫{name}")
# # partial_variables 部分提示词
# # prompt = prompt_template.format(name="小伊伊", role="医疗")
# prompt = prompt_template.invoke(input={"name": "小姨", "role": "医疗"})
# print(type(prompt))
# print(f"提示词===》{prompt.text}")


# ---------- ChatPromptTemplate
chat_prompt_template = ChatPromptTemplate.from_messages(
    [
        ("system", "你是一个AI小助手，你的名字叫：{name}"),
        MessagesPlaceholder(variable_name="historyMsgs")
    ]
)
chat_prompt_template.invoke({
    "name": "小意",
    "msgs": [
        HumanMessage(content="你叫什么名字")
    ]
})
